package Negocio;

import java.util.ArrayList;
import java.util.List;

import DTO.DTO_Area;
import DTO.DTO_Barra;
import DTO.DTO_Cafeteria;
import DTO.DTO_Cocina;
import DTO.DTO_Empleado;
import DTO.DTO_Encargado;
import DTO.DTO_Local;
import DTO.DTO_Mozo;
import Entities.Entity_Area;
import Entities.Entity_Barra;
import Entities.Entity_Cafeteria;
import Entities.Entity_Cocina;
import Entities.Entity_Empleado;
import Entities.Entity_Encargado;
import Entities.Entity_Local;
import Entities.Entity_Mozo;

public class Local {
	
	private String ubicacion;
	private Salon salon;
	private List<Empleado> empleados;
	private List<Area> areas;
	private Caja caja;
	private Carta carta;
	private float horasProduccion;
	
	private int idLocal;
	
	//Constructores
	public Local(String ubicacion, Salon salon, List<Empleado> empleados, List<Area> areas, Caja caja, Carta carta, float horasProduccion, InformeReposicion informes) {
		super();
		this.ubicacion = ubicacion;
		this.salon = salon;
		this.empleados = empleados;
		this.areas = areas;
		this.caja = caja;
		this.carta = carta;
		this.horasProduccion = horasProduccion;
	
	}
	
	public Local(DTO_Local local){
		this.ubicacion = local.getUbicacion();
		this.salon = new Salon(local.getSalon());
		this.empleados = new ArrayList<Empleado>();
		for(DTO_Empleado e : local.getEmpleados()){
			if(e instanceof DTO_Mozo){
				Mozo m = new Mozo((DTO_Mozo) e);
				this.empleados.add(m);
			}
			else{
				Encargado enc = new Encargado((DTO_Encargado) e);
				this.empleados.add(enc);
			}
		}
		this.areas = new ArrayList<Area>();
		for(DTO_Area a : local.getAreas()){
			if(a instanceof DTO_Cafeteria){
				Cafeteria c = new Cafeteria((DTO_Cafeteria) a);
				this.areas.add(c);
			}
			else if(a instanceof DTO_Barra){
				Barra b = new Barra((DTO_Barra) a);
				this.areas.add(b);
			}
			else{
				Cocina c = new Cocina((DTO_Cocina) a);
				this.areas.add(c);
			}
		}
		
		this.caja = new Caja(local.getCaja());
		this.carta = new Carta(local.getCarta());
		this.horasProduccion = local.getHorasProduccion();
	}
	
	public Local(Entity_Local local){
		this.ubicacion = local.getUbicacion();
		this.salon = new Salon(local.getSalon());
		this.empleados = new ArrayList<Empleado>();
		for(Entity_Empleado e : local.getEmpleados()){
			if(e instanceof Entity_Mozo){
				Mozo m = new Mozo((Entity_Mozo) e);
				this.empleados.add(m);
			}
			else{
				Encargado enc = new Encargado((Entity_Encargado) e);
				this.empleados.add(enc);
			}
		}
		this.areas = new ArrayList<Area>();
		for(Entity_Area a : local.getAreas()){
			if(a instanceof Entity_Cafeteria){
				Cafeteria c = new Cafeteria((Entity_Cafeteria) a);
				this.areas.add(c);
			}
			else if(a instanceof Entity_Barra){
				Barra b = new Barra((Entity_Barra) a);
				this.areas.add(b);
			}
			else{
				Cocina c = new Cocina((Entity_Cocina) a);
				this.areas.add(c);
			}
		}
		
		this.caja = new Caja(local.getCaja());
		this.carta = new Carta(local.getCarta());
		this.horasProduccion = local.getHorasProduccion();
	}


	public Local() {
	}

	//GET & SET
	public String getUbicacion() {
		return ubicacion;
	}

	public void setUbicacion(String ubicacion) {
		this.ubicacion = ubicacion;
	}

	public Salon getSalon() {
		return salon;
	}

	public void setSalon(Salon salon) {
		this.salon = salon;
	}

	public List<Empleado> getEmpleados() {
		return empleados;
	}

	public void setEmpleados(List<Empleado> empleados) {
		this.empleados = empleados;
	}

	public List<Area> getAreas() {
		return areas;
	}

	public void setAreas(List<Area> areas) {
		this.areas = areas;
	}

	public Caja getCaja() {
		return caja;
	}

	public void setCaja(Caja caja) {
		this.caja = caja;
	}

	public Carta getCarta() {
		return carta;
	}

	public void setCarta(Carta carta) {
		this.carta = carta;
	}

	public float getHorasProduccion() {
		return horasProduccion;
	}

	public void setHorasProduccion(float horasProduccion) {
		this.horasProduccion = horasProduccion;
	}

	public int getIdLocal() {
		return idLocal;
	}

	public void setIdLocal(int idLocal) {
		this.idLocal = idLocal;
	}
	
	//METODOS DE NEGOCIO
	
	public void abrirMesa(DTO_Mozo mozo, int cantComenzales){
			Mozo m = new Mozo(mozo);
			if(m.cantMesasMozo() <= 4){
				//Verificar reservas
				
				
			}
		
	}
	
	
	public DTO_Local toDTO(){
		DTO_Local l = new DTO_Local();
		l.setHorasProduccion(horasProduccion);
		l.setUbicacion(ubicacion);
		l.setIdLocal(idLocal);
		l.setHorasProduccion(horasProduccion);
		List<DTO_Empleado> aux_e = new ArrayList<DTO_Empleado>();
		for(Empleado e: empleados){
			aux_e.add(e.toDTO());
		}
		l.setEmpleados(aux_e);
		List<DTO_Area> aux_a = new ArrayList<DTO_Area>();
		for(Area e: areas){
			aux_a.add(e.toDTO());
		}
		l.setAreas(aux_a);
		l.setCaja(caja.toDTO());
		l.setCarta(carta.toDTO());
		l.setSalon(salon.toDTO());
		return l;
	}
	
	public Entity_Local toEntity(){
		Entity_Local l = new Entity_Local();
		l.setHorasProduccion(horasProduccion);
		l.setUbicacion(ubicacion);
		l.setIdLocal(idLocal);
		l.setHorasProduccion(horasProduccion);
		List<Entity_Empleado> aux_e = new ArrayList<Entity_Empleado>();
		for(Empleado e: empleados){
			aux_e.add(e.toEntity());
		}
		l.setEmpleados(aux_e);;
		List<Entity_Area> aux_a = new ArrayList<Entity_Area>();
		for(Area e: areas){
			aux_a.add(e.toEntity());
		}
		l.setAreas(aux_a);
		l.setCaja(caja.toEntity());
		l.setCarta(carta.toEntity());
		l.setSalon(salon.toEntity());
		return l;
	}

	public Cocina getCocina()
	{
		for(Area area: areas)
		{
			if(area instanceof Cocina)
				return (Cocina)area;
		}
			
		return null;
		
	}
	public InformeReposicion obtenerInformeReposicion()
	{
		InformeReposicion ir = new InformeReposicion();
		for(Area area: areas)
			ir.addInformeReposicionArea(area.getInformeReposicionArea());
			
		return ir;
		
	}
	

}
